# 语法
# lambda 参数 : 表达式
# lambda arg1, arg2, arg3, ... argN : expression
# 其实就是一个精简的函数
# 相当于如下函数
# def <lambda>(arg1, arg2, arg3, ...argN):
#     return expression

# 需求：传入一个数字x，得到x的平方
square_y = lambda y: y * y
print(square_y(3))  # 9
print(square_y)  # <function <lambda> at 0x102244310> 其实就是一个函数的引用

# lambda 是一个表达式，所以它可以存在于一般的函数无法存在的地方
y = [lambda x: x * x, 2, 3]

result = y[0](y[1])
print(result)  # 4

# y[0] 得到 lambda 表达式创建的匿名函数
# 后面的小括号表示函数的调用，并且传入了参数 y[1] =2
# 所以得到：2 * 2 = 4

print(y[0](y[2]))  # 9

mapped = map(lambda x: ord(x) + 10, "FishC")
print(list(mapped))  # [80, 115, 125, 114, 77]

print(list(filter(lambda x: x % 2, range(10))))  # [1, 3, 5, 7, 9]
